perm filename FLOYD.SAI[1,JMC] blob
sn#005227 filedate 1970-02-19 generic text, type T, neo UTF8
00050 BEGIN
00100 PROCEDURE SORT(INTEGER ARRAY A);
00200 BEGIN
00300 INTEGER MAX,NN,N,L,R,W,M,TEMP,K,T;
00350 LABEL AA,D,BB,DD,EE;
00400 INTEGER PROCEDURE DOWN(INTEGER X);RETURN(X%2);
00500 INTEGER PROCEDURE LEFT(INTEGER X);RETURN(2*X);
00600 INTEGER PROCEDURE RIGHT(INTEGER X);RETURN(2*X+1);
00700 MAX←ARRINFO(A,2);
00800
00900 FOR NN←DOWN(MAX) STEP -1 UNTIL 1 DO BEGIN
01000 N←NN;
01100 AA: IF (L←LEFT(N))>MAX THEN GO TO D;
01200 IF L=MAX THEN BEGIN IF A[L]<A[N] THEN
01300 BEGIN T←A[L];A[L]←A[N];A[N]←T END; GO TO D END;
01400
01500 W←A[M←IF A[L]<A[R←RIGHT(N)] THEN L ELSE R];
01600 IF A[N] < W THEN GO TO D;
01700 T←A[N];A[N]←A[M];A[M]←T; IF M=L THEN N←LEFT(N) ELSE N←RIGHT(N); GO TO AA;
01800 D: END;
01900
02000 FOR NN←MAX STEP -1 UNTIL 2 DO BEGIN
02100 TEMP←A[NN]; A[NN]←A[1]; N←1;
02200 BB:
02300 IF (L←LEFT(N))≥NN THEN BEGIN M←N; GO TO DD END;
02400 IF L=NN-1 THEN BEGIN A[N]←A[L]; M←L; GO TO DD END;
02500 M←IF A[L] < A[R←RIGHT(N)] THEN L ELSE R;
02600 A[N]←A[M]; N←M; GO TO BB;
02700 DD:
02800 A[M]←TEMP;
02900 EE:
03000 IF M>1 ∧ A[M] <A[K←DOWN(M)] THEN BEGIN
03100 T←A[M];A[M]←A[K];A[K]←T; M←K; GO TO EE END;
03200 END END;
03300 INTEGER N,I;
03400 OUTSTR("
03500 N=");N←CVD(INCHWL);
03600 BEGIN INTEGER ARRAY A[1:N];
03700 OUTSTR("NOW THE ARRAY TO BE SORTED
03800 ");
03900 FOR I←1 STEP 1 UNTIL N DO A[I]←CVD(INCHWL);
04000
04100 SORT(A);
04200
04300 FOR I←1 STEP 1 UNTIL N DO OUTSTR(CVS(A[I])&" ");
04400 END END;